package com.easy.zhihu.util;

import org.springframework.util.StringUtils;

import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @Packge com.easy.zhihu.util
 * @Autor linNaibin
 * @Description
 * @Version 1.0
 * @Date 2021/3/17 13:55
 */
public class HtmlFormat {
    private static final String regEx_script = "<script[^>]*?>[\\s\\S]*?<\\/script>"; // 定义script的正则表达式
    private static final String regEx_style = "<style[^>]*?>[\\s\\S]*?<\\/style>"; // 定义style的正则表达式
    private static final String regEx_html = "<[^>]+>"; // 定义HTML标签的正则表达式
    private static final String regEx_space = "\\s*|\t|\r|\n";//定义空格回车换行符
    //定义style的正则表达式，去除style样式，防止css代码过多时只截取到css样式代码
    private static final String img_Regex = "<\\s*img(.+?)/>";


    public static void main(String[] args) {
        String str = "<figure data-size=\"normal\"><noscript><img src=\"https://pic2.zhimg.com/50/v2-342a7566908f7af9404147022eb70f37_hd.jpg?source=1940ef5c\" data-rawwidth=\"2048\" data-rawheight=\"1366\" data-size=\"normal\" data-default-watermark-src=\"https://pic1.zhimg.com/50/v2-5c4cd4429b88add264b6e754cc9f07d1_hd.jpg?source=1940ef5c\" class=\"origin_image zh-lightbox-thumb\" width=\"2048\" data-original=\"https://pic2.zhimg.com/v2-342a7566908f7af9404147022eb70f37_r.jpg?source=1940ef5c\"/></noscript><img src=\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='2048' height='1366'></svg>\" data-rawwidth=\"2048\" data-rawheight=\"1366\" data-size=\"normal\" data-default-watermark-src=\"https://pic1.zhimg.com/50/v2-5c4cd4429b88add264b6e754cc9f07d1_hd.jpg?source=1940ef5c\" class=\"origin_image zh-lightbox-thumb lazy\" width=\"2048\" data-original=\"https://pic2.zhimg.com/v2-342a7566908f7af9404147022eb70f37_r.jpg?source=1940ef5c\" data-actualsrc=\"https://pic2.zhimg.com/50/v2-342a7566908f7af9404147022eb70f37_hd.jpg?source=1940ef5c\"/></figure><p class=\"ztext-empty-paragraph\"><br/></p><figure data-size=\"normal\"><noscript><img src=\"https://pic1.zhimg.com/50/v2-ef980ca90b9b0d4024e84c2b3f2b07b1_hd.jpg?source=1940ef5c\" data-rawwidth=\"2048\" data-rawheight=\"1365\" data-size=\"normal\" data-default-watermark-src=\"https://pic2.zhimg.com/50/v2-38667402894697ec5263fc978c063ce3_hd.jpg?source=1940ef5c\" class=\"origin_image zh-lightbox-thumb\" width=\"2048\" data-original=\"https://pic2.zhimg.com/v2-ef980ca90b9b0d4024e84c2b3f2b07b1_r.jpg?source=1940ef5c\"/></noscript><img src=\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='2048' height='1365'></svg>\" data-rawwidth=\"2048\" data-rawheight=\"1365\" data-size=\"normal\" data-default-watermark-src=\"https://pic2.zhimg.com/50/v2-38667402894697ec5263fc978c063ce3_hd.jpg?source=1940ef5c\" class=\"origin_image zh-lightbox-thumb lazy\" width=\"2048\" data-original=\"https://pic2.zhimg.com/v2-ef980ca90b9b0d4024e84c2b3f2b07b1_r.jpg?source=1940ef5c\" data-actualsrc=\"https://pic1.zhimg.com/50/v2-ef980ca90b9b0d4024e84c2b3f2b07b1_hd.jpg?source=1940ef5c\"/></figure><p class=\"ztext-empty-paragraph\"><br/></p><figure data-size=\"normal\"><noscript><img src=\"https://pic1.zhimg.com/50/v2-a0e7971012433762b89f2b4a80ac7cac_hd.jpg?source=1940ef5c\" data-rawwidth=\"2048\" data-rawheight=\"1366\" data-size=\"normal\" data-default-watermark-src=\"https://pic2.zhimg.com/50/v2-b8c70c7caea3de9f7d4413422ce3671c_hd.jpg?source=1940ef5c\" class=\"origin_image zh-lightbox-thumb\" width=\"2048\" data-original=\"https://pic1.zhimg.com/v2-a0e7971012433762b89f2b4a80ac7cac_r.jpg?source=1940ef5c\"/></noscript><img src=\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='2048' height='1366'></svg>\" data-rawwidth=\"2048\" data-rawheight=\"1366\" data-size=\"normal\" data-default-watermark-src=\"https://pic2.zhimg.com/50/v2-b8c70c7caea3de9f7d4413422ce3671c_hd.jpg?source=1940ef5c\" class=\"origin_image zh-lightbox-thumb lazy\" width=\"2048\" data-original=\"https://pic1.zhimg.com/v2-a0e7971012433762b89f2b4a80ac7cac_r.jpg?source=1940ef5c\" data-actualsrc=\"https://pic1.zhimg.com/50/v2-a0e7971012433762b89f2b4a80ac7cac_hd.jpg?source=1940ef5c\"/></figure><p class=\"ztext-empty-paragraph\"><br/></p><figure data-size=\"normal\"><noscript><img src=\"https://pic4.zhimg.com/50/v2-66484bc4987f17f06cc00fef87469a9d_hd.jpg?source=1940ef5c\" data-rawwidth=\"1080\" data-rawheight=\"1913\" data-size=\"normal\" data-default-watermark-src=\"https://pic1.zhimg.com/50/v2-ffa6d10c8a3cdc37cf1868b0b5fb155b_hd.jpg?source=1940ef5c\" class=\"origin_image zh-lightbox-thumb\" width=\"1080\" data-original=\"https://pic4.zhimg.com/v2-66484bc4987f17f06cc00fef87469a9d_r.jpg?source=1940ef5c\"/></noscript><img src=\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='1080' height='1913'></svg>\" data-rawwidth=\"1080\" data-rawheight=\"1913\" data-size=\"normal\" data-default-watermark-src=\"https://pic1.zhimg.com/50/v2-ffa6d10c8a3cdc37cf1868b0b5fb155b_hd.jpg?source=1940ef5c\" class=\"origin_image zh-lightbox-thumb lazy\" width=\"1080\" data-original=\"https://pic4.zhimg.com/v2-66484bc4987f17f06cc00fef87469a9d_r.jpg?source=1940ef5c\" data-actualsrc=\"https://pic4.zhimg.com/50/v2-66484bc4987f17f06cc00fef87469a9d_hd.jpg?source=1940ef5c\"/><figcaption>大学时候，拍出来好黑哈哈</figcaption></figure><p></p>";

       String str2 = "<img src=\"https://pic2.zhimg.com/50/v2-342a7566908f7af9404147022eb70f37_hd.jpg?source=1940ef5c\" data-rawwidth=\"2048\" data-rawheight=\"1366\" data-size=\"normal\" data-default-watermark-src=\"https://pic1.zhimg.com/50/v2-5c4cd4429b88add264b6e754cc9f07d1_hd.jpg?source=1940ef5c\" class=\"origin_image zh-lightbox-thumb\" width=\"2048\" data-original=\"https://pic2.zhimg.com/v2-342a7566908f7af9404147022eb70f37_r.jpg?source=1940ef5c\"/>";

        String str3 ="95年达州妹子，现达州市工作，希望在此能找到一枚川渝内的合适对象。先说下自己的条件吧：体型：身高165，体重88斤（有点偏瘦），算是大长腿吧（比例比较好）。外貌：颜值的话，算是比较耐看吧，本人脸比较小，皮肤干净，五官端正，平时几乎不化妆（有意者可交换照片）。学历：985生物学硕士。工作：市属单位事业编。性格：活泼开朗，情商在线，比较会为人处世吧，还有点小幽默。爱好：工作之余会刷刷b站放松一下心情，喜欢古典文化，比较喜欢看书，有点宅。家庭：父母属于个体工商户，家庭算是小康吧。父母关系良好，家庭氛围和谐。个人情况先大概写这么多吧，有意者想要了解更多的，可私信答主。下面说说对对方的要求吧：体型：不喜欢太胖或者太瘦的男生，希望对方身高175➕。外貌：颜值的话，五官端正，看得顺眼。年龄：90年至96年。学历：重本本科以上。工作：工作稳定，收入能保证家庭的基本开销即可。性格：阳光开朗，幽默风趣，善良、包容，有责任感，有上进心，情商也不能太低吧。爱好：一般情况下，本人会尊重对方的爱好，但不喜欢经常抽烟喝酒打牌的男生，游戏的话可以打，但不能太沉迷！整体上还是偏向于接受斯文一点的男孩子吧（那种不泡酒吧网吧，更顾家一些的男生）。家庭：家庭和谐，养老压力不能太大（指超过两个人的经济能力以外的养老压力）。最后放几张非正面照吧（不想在社交网站上放正面照）：大学时候，拍出来好黑哈哈";

        System.out.println("源：\n" + str3);

      //  System.out.println("之后：\n" + getTextFromHtml(str));

        System.out.println("zz后：\n" + cleanString(str3));

        String ss = "➕";
        char c = ss.charAt(0);
        int asc = c ;
        System.out.println(asc);

    }

    public static String getTextFromHtml(String htmlStr) {
        if(StringUtils.isEmpty(htmlStr)) {
            return "";
        }
        htmlStr = delHTMLTag(htmlStr);

        // 非法字符
        return cleanString(htmlStr);
    }

    /**
     * 清除ASCII码中的换行符等特殊字符
     * @param dirtyString
     * @return
     */
    public static String cleanString(String dirtyString){
        char[] charArray = dirtyString.toCharArray();
        String cleanStr = "";
        for (char charactor:charArray) {
            Integer[] wrongChar={1,2,3,4,5,6,7,8,12,13,14,15,16,17,18,19,20,12,22,23,24,25,26,27,28,29,30,31,10133};
            List<Integer> arr = Arrays.asList(wrongChar);
            Integer thisChar = new Integer(charactor);
            if(arr.contains(thisChar)){//如果包含非法字符，就跳过
                System.out.println("警告：该字符串包含非法ASCII字符"+charactor);
                continue;
            }else if(thisChar==10){//换行符处理，把换行符换成\n，修复不同android版本不兼容的问题
                cleanStr = cleanStr.concat("\n");
            }else {//正常字符
                cleanStr = cleanStr.concat(String.valueOf(charactor));
            }
        }
        return cleanStr;
    }


    /**
     * @param htmlStr
     * @return 删除Html标签
     */
    public static String delHTMLTag(String htmlStr) {
        Pattern p_script = Pattern.compile(regEx_script, Pattern.CASE_INSENSITIVE);
        Matcher m_script = p_script.matcher(htmlStr);
        htmlStr = m_script.replaceAll(""); // 过滤script标签

        Pattern p_style = Pattern.compile(regEx_style, Pattern.CASE_INSENSITIVE);
        Matcher m_style = p_style.matcher(htmlStr);
        htmlStr = m_style.replaceAll(""); // 过滤style标签


        // img

        Pattern img_html = Pattern.compile(img_Regex, Pattern.CASE_INSENSITIVE);
        Matcher img_m_html = img_html.matcher(htmlStr);

          htmlStr = img_m_html.replaceAll(""); // 过滤 img 标签


        Pattern p_html = Pattern.compile(regEx_html, Pattern.CASE_INSENSITIVE);
        Matcher m_html = p_html.matcher(htmlStr);
        htmlStr = m_html.replaceAll(""); // 过滤html标签


        Pattern p_space = Pattern.compile(regEx_space, Pattern.CASE_INSENSITIVE);
        Matcher m_space = p_space.matcher(htmlStr);
        htmlStr = m_space.replaceAll(""); // 过滤空格回车标签
        htmlStr = htmlStr.replaceAll("&nbsp;", "");//去空格
        return htmlStr.trim(); // 返回文本字符串
    }

}
